// 获取系统信息的模块
const os = require("os");
const electron = require('electron');
// 控制应用生命周期的模块
const {app} = electron;
// 创建本地浏览器窗口的模块 
const {BrowserWindow} = electron;

//通信模块(渲染进程像主进程通信)
const ipcMain = require('electron').ipcMain;

//主进程像渲染进程通信
let webContents;

// 获取远程项目信息
const config = require('./config/config');

// 指向窗口对象的一个全局引用，如果没有这个引用，那么当该javascript对象被垃圾回收的时候该窗口将会自动关
let win;
//引入menu
let Menu = electron.Menu;
//引入menuIteam
let MenuItem = electron.MenuItem

let Tray = electron.Tray;

let tray = null;

let isClose = false;

// 获取开发环境变量
let env = process.env.NODE_ENV;

// 托盘角标
let image = '';
const nativeImage = electron.nativeImage;

// 如果是mac系统
if (os.platform() == 'darwin') {
  image = nativeImage.createFromPath(config[env].trayMacImg);
} else {
  image = nativeImage.createFromPath(config[env].trayImg);
}

function createWindow() {
 // 创建一个新的浏览器窗口 
  win = new BrowserWindow({
    width: 1280,
    height: 905,
    maxWidth:1280,
    maxHeight:905,
    useContentSize:true,
    resizable:false,
    autoHideMenuBar:true,
    icon:image
  });

  // 装载应用的index.html页面  
  win.loadURL(`file://${__dirname}/index.html`);

  webContents = win.webContents;

  tray = new Tray(image);

  const contextMenu = Menu.buildFromTemplate([
    
    {
      label:"打开MPS",
      click(){
         win.show();
      }
    },
    {
      label:"升级更新",
      click(){
        getVersion();
      }
    },
    {
      label:"退出MPS",
      click(){
        exit();
      }
    }
  ]);
  tray.setToolTip('MPS 客资管理系统');
  tray.setContextMenu(contextMenu);

  // 打开开发工具页面
  //win.webContents.openDevTools();

  win.on('close', (event) => {
    win.show();
    closeOrMinimize();
    if (!isClose) {
      //阻止关闭
      event.preventDefault();
    }
  });

  // 当窗口关闭时调用的方法 
  win.on('closed', () => {
    // 解除窗口对象的引用，通常而言如果应用支持多个窗口的话，你会在一个数组里存放窗口对象，在窗口关闭的时候应当删除相应的元素。
    win = null;
    webContents = null;
  });

  // 托盘点击事件
  tray.on('click', () => {
    win.show();
  });
}

// 当Electron完成初始化并且已经创建了浏览器窗口，则该方法将会被调用。  
// 有些API只能在该事件发生后才能被使用。  
app.on('ready', createWindow);

// 当所有的窗口被关闭后退出应用  
app.on('window-all-closed', () => {
  // 对于OS X系统，应用和相应的菜单栏会一直激活直到用户通过Cmd + Q显式退出 
  if (process.platform !== 'darwin') {
    app.quit();
  }
});

// 当所有的窗口被关闭后退出应用  
app.on('activate', () => {
  // 对于OS X系统，当dock图标被点击后会重新创建一个app窗口，并且不会有其他  
  // 窗口打开
  if (win === null) {
    createWindow();
  }
});

//版本更新
function getVersion() {
  win.show();
  win.webContents.send('asynchronous-version');
}

//退出MPS
function exit() {
  win.show();
  win.webContents.send('asynchronous-exit');
}

//点击X事件
function closeOrMinimize() {
  win.webContents.send('asynchronous-close-minimize');
}

//监听app.js里发出的初始化关闭信息
ipcMain.on('asynchronous-Initialization-close', (event) => {
  //event.sender.send('asynchronous-version', version);
  isClose = true;
})

//最小化
ipcMain.on('asynchronous-hiden', (event) => {
  win.hide();
})
